1
กระบวนการที่มีสถานะคงที่และการปรับแต่งการเรียกแบบสุดท้าย
AI019Lesson 7
00:00

ในเอลิกซีร์ กระบวนการจะถูกสร้างขึ้นโดยอัตโนมัติเป็นช่วงสั้น ๆ หลังจากฟังก์ชันทำงานเสร็จแล้ว กระบวนการจะสิ้นสุดลง ในการสร้าง กระบวนการที่มีสถานะคงที่ เราใช้การเรียกซ้ำ (recursion) เพื่อให้กระบวนการยังคงดำเนินอยู่ในลูปต่อไป

1. การปรับแต่งการเรียกแบบสุดท้าย (TCO)

หากการกระทำสุดท้ายของฟังก์ชันคือการเรียกตัวเอง ระบบเสมือนของเออร์แลง (BEAM) จะทำการ การปรับแต่งการเรียกแบบสุดท้ายแทนที่จะเพิ่มเฟรมใหม่ลงในสแตก ระบบจะเพียงแค่ กลับไปยังจุดเริ่มต้น ของฟังก์ชันพร้อมอาร์กิวเมนต์ใหม่

def factorial(n, acc), do: _fact(n-1, acc*n) # TCO
def factorial(n), do: n * factorial(n-1) # ไม่ใช่ TCO
ตรรกะของ greet()การเรียกใช้ greet()TCO: ใช้เฟรมสแตกซ้ำ

2. สถานะคงที่

สถานะจะถูกเก็บรักษาไว้โดยการส่งค่าที่อัปเดตมาเป็นอาร์กิวเมนต์ในการเรียกซ้ำ ด้วยเหตุผลของ TCO ค่าอาร์กิวเมนต์เหล่านี้จะแทนที่พารามิเตอร์เดิมบนสแตกโดยไม่ต้องใช้หน่วยความจำเพิ่มเติม ทำให้ลูปสามารถทำงานได้ไม่สิ้นสุด

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>